https://leetcode.cn/problems/JEj789/description/
//class Solution {
//public:
//    int minCost(vector<vector<int>>& costs)
//    {
//        int n = costs.size();
//        if (n <= 0) return 0;
//
//        vector<vector<int>> dp(n + 1, vector<int>(3));
//        for (int i = 1; i <= n; i++)
//        {
//            dp[i][0] = min(dp[i - 1][1], dp[i - 1][2]) + costs[i - 1][0];
//            dp[i][1] = min(dp[i - 1][0], dp[i - 1][2]) + costs[i - 1][1];
//            dp[i][2] = min(dp[i - 1][1], dp[i - 1][0]) + costs[i - 1][2];
//        }
//        return min(dp[n][2], min(dp[n][0], dp[n][1]));
//    }
};


https://leetcode.cn/problems/delete-and-earn/description/
//class Solution {
//public:
//    int deleteAndEarn(vector<int>& nums)
//    {
//        int n = nums.size();
//        if (n <= 0) return 0;
//        int max1 = 0;
//        for (int i = 0; i < n; i++)
//        {
//            if (max1 < nums[i])
//            {
//                max1 = nums[i];
//            }
//        }
//        max1 += 1;
//        vector<int> arr(max1);
//        for (int i = 0; i < n; i++)
//        {
//            arr[nums[i]] += nums[i];
//        }
//
//        vector<vector<int>> dp(max1, vector<int>(2));
//        dp[0][1] = arr[0];
//        for (int i = 1; i < max1; i++)
//        {
//            dp[i][1] = dp[i - 1][0] + arr[i];
//            dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);
//        }
//
//        return  max(dp[max1 - 1][0], dp[max1 - 1][1]);
//    }
//};